package testPodsumowan;

import java.io.IOException;

import ZmiennaLingwistyczna.WartoscLingwistyczna;

import FunkcjePrzynaleznosci.IFunkcjaPrzynaleznosci;
import FunkcjePrzynaleznosci.TrapezoidalnaFunkcjaPrzynaleznosci;
import FunkcjePrzynaleznosci.TrojkatnaFunkcjaPrzynaleznosci;
import PodsumowaniaLingwistyczne.IKwalifikator;
import PodsumowaniaLingwistyczne.ISumaryzator;
import PodsumowaniaLingwistyczne.Kwalifikator;
import PodsumowaniaLingwistyczne.Kwantyfikator;
import PodsumowaniaLingwistyczne.Miary;
import PodsumowaniaLingwistyczne.Podsumowanie;
import PodsumowaniaLingwistyczne.Sumaryzator;
import PrzestrzenCiagla.CiaglyZbiorRozmyty;
import PrzestrzenCiagla.PrzestrzenCiagla;
import csvIO.CsvIO;
import csvIO.CsvObject;

public class Tester {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			CsvObject bazaDanych = (new CsvIO()).readCSV("baza.txt", false);

		
		PrzestrzenCiagla przestrzen = new PrzestrzenCiagla(0.0f, 50.0f, 0.1f);
		IFunkcjaPrzynaleznosci funkcja = new TrojkatnaFunkcjaPrzynaleznosci(0.0f, 4.0f, 8.0f);
		
		CiaglyZbiorRozmyty zbiorSumaryzator = new CiaglyZbiorRozmyty(przestrzen, funkcja);
		
		WartoscLingwistyczna wartoscSumaryzator = new WartoscLingwistyczna("niewielkie", zbiorSumaryzator);
		
		ISumaryzator sumaryzator = new Sumaryzator(wartoscSumaryzator, 2);
		

		
		PrzestrzenCiagla przestrzenIlosc = new PrzestrzenCiagla(0.0f, 1.0f, 0.01f);
		
		IFunkcjaPrzynaleznosci funkcjaNiewiele = new TrapezoidalnaFunkcjaPrzynaleznosci(0.0f, 0.0f, 0.15f, 0.2f);
		
		CiaglyZbiorRozmyty zbiorNiewiele = new CiaglyZbiorRozmyty(przestrzenIlosc, funkcjaNiewiele);
		
		WartoscLingwistyczna wartoscNiewiele = new WartoscLingwistyczna("niewiele", zbiorNiewiele);
		
		Kwantyfikator kwantyfikatorNiewiele = new Kwantyfikator(wartoscNiewiele, false);
	
		
		IFunkcjaPrzynaleznosci funkcjaSrednio = new TrapezoidalnaFunkcjaPrzynaleznosci(0.15f, 0.3f, 0.6f, 0.7f);
		
		CiaglyZbiorRozmyty zbiorSrednio = new CiaglyZbiorRozmyty(przestrzenIlosc, funkcjaSrednio);
		
		WartoscLingwistyczna wartoscSrednio = new WartoscLingwistyczna("srednio", zbiorSrednio);
		
		Kwantyfikator kwantyfikatorSrednio = new Kwantyfikator(wartoscSrednio, false);

		
		IFunkcjaPrzynaleznosci funkcjaDuzo = new TrapezoidalnaFunkcjaPrzynaleznosci(0.68f, 0.8f, 1.0f, 1.0f);
		
		CiaglyZbiorRozmyty zbiorDuzo = new CiaglyZbiorRozmyty(przestrzenIlosc, funkcjaDuzo);
		
		WartoscLingwistyczna wartoscDuzo = new WartoscLingwistyczna("duzo", zbiorDuzo);
		
		Kwantyfikator kwantyfikatorDuzo = new Kwantyfikator(wartoscDuzo, true);
	
		float[] wagi = new float[12];
		for(int i = 1; i<12; i++){
			wagi[i] = 1.0f/11.0f;
		}
		
		Podsumowanie podsumowanie = new Podsumowanie(sumaryzator, kwantyfikatorNiewiele);
		
//		System.out.println(Miary.ocen(podsumowanie, bazaDanych, wagi));
//		System.out.println(ocenaToString(podsumowanie.getOcena()));
		
		podsumowanie = new Podsumowanie(sumaryzator, kwantyfikatorSrednio);
		
//		System.out.println(Miary.ocen(podsumowanie, bazaDanych, wagi));
//		System.out.println(ocenaToString(podsumowanie.getOcena()));
		
		podsumowanie = new Podsumowanie(sumaryzator, kwantyfikatorDuzo);
	
//		System.out.println(Miary.ocen(podsumowanie, bazaDanych, wagi));
//		System.out.println(ocenaToString(podsumowanie.getOcena()));
		
		PrzestrzenCiagla przestrzenKwalifikator = new PrzestrzenCiagla(0.0f, 400.0f, 0.1f);
		IFunkcjaPrzynaleznosci funkcjaKwalifikator = new TrapezoidalnaFunkcjaPrzynaleznosci(100.0f, 120.0f, 170.0f, 190.0f);
		
		CiaglyZbiorRozmyty zbiorKwalifikator = new CiaglyZbiorRozmyty(przestrzenKwalifikator, funkcjaKwalifikator);
		
		WartoscLingwistyczna wartoscSredniaOdleglosc = new WartoscLingwistyczna("sredniaOdleglosc", zbiorKwalifikator);
		
		Kwantyfikator kwantyfikatorKwalifikator = new Kwantyfikator(wartoscSredniaOdleglosc, true);
		
		IKwalifikator kwalifikator = new Kwalifikator(kwantyfikatorKwalifikator, 3);
		
		podsumowanie = new Podsumowanie(sumaryzator, kwantyfikatorNiewiele, kwalifikator);
		
		System.out.println(Miary.ocen(podsumowanie, bazaDanych, wagi));
		System.out.println(ocenaToString(podsumowanie.getOcena()));
		
		podsumowanie = new Podsumowanie(sumaryzator, kwantyfikatorSrednio, kwalifikator);
		
		System.out.println(Miary.ocen(podsumowanie, bazaDanych, wagi));
		System.out.println(ocenaToString(podsumowanie.getOcena()));
		
		podsumowanie = new Podsumowanie(sumaryzator, kwantyfikatorDuzo, kwalifikator);
		
		System.out.println(Miary.ocen(podsumowanie, bazaDanych, wagi));
		System.out.println(ocenaToString(podsumowanie.getOcena()));
		
		
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
	
	public static String ocenaToString(float[] ocena){
		StringBuilder str = new StringBuilder();
		
		for(int i = 0; i < ocena.length; i++){
			str.append(ocena[i]).append(" ; ");
		}
		
		return str.toString();
	}

}
